#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Docker环境下管理员初始化脚本
在容器启动后自动创建管理员账号
"""

import os
import sys
import time
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

# 添加项目路径
sys.path.append('/app')

def wait_for_db():
    """等待数据库就绪"""
    max_retries = 30
    for i in range(max_retries):
        try:
            from app import app
            from models.models import db
            
            with app.app_context():
                db.engine.connect()
                print(f"✅ 数据库连接成功 (尝试 {i+1}/{max_retries})")
                return True
        except Exception as e:
            print(f"⏳ 等待数据库启动... (尝试 {i+1}/{max_retries}): {e}")
            time.sleep(2)
    
    print("❌ 数据库连接超时")
    return False

def create_admin():
    """创建管理员账号"""
    try:
        from app import app
        from models.models import db, User
        
        with app.app_context():
            # 检查是否已存在admin用户
            existing_admin = User.query.filter_by(username='admin').first()
            
            if existing_admin:
                print("⚠️  管理员用户已存在，更新密码...")
                existing_admin.set_password('123456')
                db.session.commit()
                print("✅ 管理员密码已更新")
                return existing_admin
            
            # 创建新管理员
            admin_user = User(
                username='admin',
                age=30,
                gender='男',
                ethnicity='汉族',
                mandarin_level='一级甲等',
                role='admin'
            )
            admin_user.set_password('123456')
            
            db.session.add(admin_user)
            db.session.commit()
            
            print("✅ 管理员用户创建成功")
            print(f"   用户名: admin")
            print(f"   密码: 123456")
            print(f"   角色: admin")
            print(f"   ID: {admin_user.id}")
            
            return admin_user
            
    except Exception as e:
        print(f"❌ 创建管理员失败: {e}")
        return None

def main():
    """主函数"""
    print("🐳 Docker环境 - 管理员初始化")
    print("=" * 40)
    
    # 等待数据库
    if not wait_for_db():
        sys.exit(1)
    
    # 创建管理员
    admin = create_admin()
    if admin:
        print("🎉 管理员初始化完成")
    else:
        print("❌ 管理员初始化失败")
        sys.exit(1)

if __name__ == "__main__":
    main()
